home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
User's Choice Windows CD
/
User's Choice Windows CD (CMS Software)(1993).iso
/
win_u_z
/
wt_jan92.zip
/
SHAW.ZIP
/
DDE.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-05
|
4KB
|
190 lines
// dde.h RHS 10/15/91
#include<string.h>
#pragma hdrstop
#include"dde.h"
BOOL DDE::DDEOK = FALSE;
WORD DDE::conversations = 0;
// ********************************** DDE member functions
DDE::DDE(FARPROC NewCallBack, DWORD filters)
{
char buf[50];
if(!DDEOK)
instanceID = 0L;
conversations++;
DDEOK = ( (LOBYTE(GetVersion()) > 2) && (GetWinFlags() & WF_PMODE) )
? TRUE : FALSE;
CallBack = NULL;
SetCallBack((FARPROC)NewCallBack);
SetFilters(filters);
if(!Initialize())
instanceID = 0L;
}
DDE::~DDE(void)
{
if(!instanceID)
return;
conversations--;
if(conversations == 0)
{
DdeUninitialize(instanceID);
instanceID = 0;
DDEOK = 0;
}
FreeProcInstance(CallBack);
}
HSZ DDE::CreateStrHandle(LPSTR str, int codepage)
{
if(instanceID)
return DdeCreateStringHandle(instanceID,str,codepage);
}
void DDE::DestroyStrHandle(HSZ hsz)
{
if(instanceID && hsz)
DdeFreeStringHandle(instanceID,hsz);
}
BOOL DDE::Initialize(void)
{
if(lasterr = DdeInitialize(&instanceID,(PFNCALLBACK)CallBack,filters,0L))
return result = FALSE;
return TRUE;
}
void DDE::SetFilters(DWORD newFilters)
{
filters = newFilters;
}
WORD DDE::GetLastError(void)
{
return lasterr;
}
void DDE::SetCallBack(FARPROC NewCallBack)
{
if(CallBack)
FreeProcInstance(CallBack);
CallBack = MakeProcInstance((FARPROC)NewCallBack,GetInstance());
}
BOOL DDE::GetResult(void)
{
return result;
}
// ****************************** DDEClient member functions
DDEClient::DDEClient(char *s, char *t, FARPROC ClientCallBack, DWORD filters)
: DDE(ClientCallBack,filters)
{
if(!DDEOK)
{
result = FALSE;
return;
}
strcpy(server = new char[strlen(s)+1], s);
strcpy(topic = new char[strlen(t)+1],t);
hServer = CreateStrHandle(server);
hTopic = CreateStrHandle(topic);
item = NULL;
hItem = 0;
data = NULL;
SetTimeOut(1000L);
}
void DDEClient::SetTimeOut(DWORD newtimeout)
{
timeout = newtimeout;
}
WORD DDEClient::Request(char *i)
{
strcpy(item = new char[strlen(i)+1],i);
hItem = CreateStrHandle(item);
if(!Connect())
return FALSE;
if(!MakeRequest())
return FALSE;
result = TRUE;
}
BOOL DDEClient::Connect(void)
{
if((hConv = DdeConnect(instanceID,hServer,hTopic,(LPVOID)NULL)) == NULL)
return result = FALSE;
return TRUE;
}
BOOL DDEClient::MakeRequest(void)
{
HDDEDATA hData;
if(hData = DdeClientTransaction(NULL,0L,hConv,hItem,CF_TEXT,
XTYP_REQUEST,timeout,NULL))
{
DWORD len;
if(data)
delete data;
len = DdeGetData(hData,NULL,len = 0L, 0L);
data = new char[(int)(len+1)];
DdeGetData(hData,(LPBYTE)data,len,0L);
data[(int)len] = '\0';
DdeFreeDataHandle(hData);
return TRUE;
}
return FALSE;
}
char *DDEClient::GetServer(void)
{
return server;
}
char *DDEClient::GetTopic(void)
{
return topic;
}
char *DDEClient::GetItem(void)
{
return item;
}
DDEClient::~DDEClient(void)
{
delete server;
delete topic;
delete item;
delete data;
DdeDisconnect(hConv);
DestroyStrHandle(hServer);
DestroyStrHandle(hTopic);
DestroyStrHandle(hItem);
}
char *DDEClient::GetData(void)
{
return data;
}